perm filename MSFAIL.FAI[MSS,LCS] blob
sn#169958 filedate 1975-07-20 generic text, type T, neo UTF8
00100 TITLE MSSIO ; ********* JUN 8,74 *********
00200 ;; INTERNAL GETFI2,FASTI2,LOOP
00205 INTERNAL GETFI2,FASTI2
00210 INTERNAL LOOK,LOOKD,LOOKF,PAC,UNPAC
00300
00400
00500 CH3←15 ;WAS ←13 4/18/75 *******
00600
00700 DEFINE ERROR (MSG)
00800 < JSA 16,.ERROR
00900 JUMP [ASCIZ/MSG/
01000 ]
01100 >
01200
01500 ;CALL GETFI2(<FILE>)
01600
01700 GETFI2: 0
01800 MOVE 0,@0(16)
01900 MOVEM 0,FILNAM
02000 JSA 16,INTFIZ
02100 MOVE 0,[SIXBIT/DMD/]
02200 MOVEM 0,DIR+1
02300 JSA 16,LKUP
02400 SKIPA
02500 JRST GETF3
02600 SETZM DIR+1
02700 JSA 16,LKUP
02800 0
02900 GETF3: JRA 16,1(16)
03000
03100 LKUP: 0
03200 SETZM DIR+2
03300 SETZM DIR+3
03400 LOOKUP CH3,DIR
03500 JRA 16,0(16)
03600 JRA 16,1(16)
03700
03800 INTFIZ: 0 ;INITS DSK FOR INPUT
03900 MOVEI REGS
04000 BLT REGS+3
04100 INIT CH3,17
04200 SIXBIT/DSK/
04300 0
04400 ERROR <CAN'T INIT DSK!>
04500 JRST INTF4
04600
04900
05000 ;CALL FASTI2(<ARRAY>,<NO. WORDS>)
05100
05200 FASTI2: 0
05300 HRRZ 0,0(16)
05400 SUBI 0,1
05500 MOVEM 0,COM
05600 MOVN 0,@1(16)
05700 HRLM 0,COM
05800 INPUT CH3,COM
05900 STATZ CH3,740000
06000 0
06100 JRA 16,2(16)
06200
06300 COM: OCT 0,0
06400 BLKNUM: 0
08200
08300 .ERROR: 0
08400 OUTSTR [ASCIZ/?
08500 /] ;MAKE SURE HE CAN SEE HIS ERROR
08600 OUTSTR @(16) ;OUTPUT ERROR MESSAGE
08700 CALLI 1,12 ;LET USER CONTI2UE
08800 JRA 16,1(16)
00300
00400 CH←13
00500
00600 REGS: BLOCK 20
00700
00800 ;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .DMD
00900
01000 LOOKF: 0
01100 MOVSI 0,'DMD'
01200 JRST LOOK1
01300 LOOKD: 0
01400 MOVSI 0,'DAT'
01500 JRST LOOK1
01600 LOOK: 0
01700 MOVEI 0,0
01800 LOOK1: MOVEM 0,DIR+1
01900 MOVE 0,@(16)
02000 MOVEM 0,FILNAM
02100 JSA 16, INTFIQ
02200 SETZM DIR+2
02300 SETZM DIR+3
02400 LOOKUP CH,DIR
02500 TDZA 0,0
02600 MOVNI 0,1
02700 JRA 16,1(16)
02800
02900 INTFIQ: 0 ;INITS DSK FOR INPUT
03000 MOVEI REGS
03100 BLT REGS+3
03200 INIT CH,17
03300 SIXBIT/DSK/
03400 0
03500 HALT .-3
03600 ; ERROR <CAN'T INIT DSK!>
03700
03800 INTF4: MOVE 0,FILNAM#
03900 MOVEM 0,FN#
04000 MOVE 1,[POINT 7,FN]
04100 INTF3: MOVE 2,[POINT 6,DIR]
04200 SETZM DIR
04300 MOVEI 3,5
04400 INTF1: ILDB 0,1
04500 CAIN 0," "
04600 JRST INTF2
04700 SUBI 0,40
04800 IDPB 0,2
04900 SOJG 3,INTF1
05000 INTF2: HRLZI REGS
05100 BLT 3
05200 JRA 16,0(16)
05300
05400 DIR: BLOCK 4
05500
05600
05700 PAC: 0 ;CALL PAC(PW,AR)
05800 HRRZ 4,1(16) ; ******* USES AC'S 4,5,6 ********
05900 ADDI 4,2
06000 HRR 5,@4 ;SIZE IS 12 BITS
06100 LSHC 5,-10
06200 SOJ 4,
06300 HRR 5,@4
06400 LSHC 5,-16
06500 SOJ 4,
06600 HRR 5,@4
06700 LSHC 5,-16
06800 MOVEM 6,@0(16)
06900 JRA 16,2(16)
07000 UNPAC: 0 ;CALL UNPAC(PW,AR)
07100 HRRZ 1,1(16)
07200 ADDI 1,2
07300 MOVE 2,@0(16)
07400 LSHC 2,-10 ; 14 BITS, 14 BITS, 8 BITS
07500 ASH 3,-34
07600 MOVEM 3,@1
07700 SOJ 1,
07800 LSHC 2,-16
07900 ASH 3,-26
08000 MOVEM 3,@1
08100 SOJ 1,
08200 LSHC 2,-16
08300 ASH 3,-26
08400 MOVEM 3,@1
08500 JRA 16,2(16)
08550
08700
08800 ; SUBROUTINE LOOP(I,J,K,L,M,N)
08900 ; DIMENSION N(1)
09000 ; DO 1 NN=I,J,K
09100 ;1 N(NN+L)=N(NN+M)
09200 ; END
09300
09400 ;;LOOP: 0
09500 ;; MOVE 4,@1(16)
09600 ;; MOVE 3,@0(16)
09700 ;; SUB 4,3
09800 ;; HRRZ 2,5(16)
09900 ;; SOJ 2,
10000 ;; ADD 2,3
10100 ;; JUMPL 4,MIMI
10200 ;; HRR 5,2
10300 ;; ADD 5,@3(16)
10400 ;; ADD 4,2
10500 ;; ADD 4,@3(16)
10600 ;; ADD 2,@4(16)
10700 ;; HRL 5,2
10800 ;; BLT 5,(4)
10900 ;; JRA 16,6(16)
11000 ;;MIMI: HRR 5,@4(16)
11100 ;; HRRM 5,XN
11200 ;; HRR 5,@3(16)
11300 ;; HRRM 5,XN+1
11400 ;;XN: MOVE 6,(2)
11500 ;; MOVEM 6,(2)
11600 ;; SOJ 2,
11700 ;; AOJL 4,XN
11800 ;; JRA 16,6(16)
12000 ;; TITLE MOVE
12100 ENTRY GETPTS,MOVIT,OUTLIM,EXTEN,SORT2
12200 EXTERNAL .COMM.,XRN,KJY,PTR,POSI,AMOD|
12300
12400 K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
12500 DEFINE FIXX(N)
12600 < JUMPGE N,.+5
12700 MOVNS N
12800 FIX N,233000
12900 MOVNS N
13000 CAIA
13100 FIX N,233000 > ; TO FIX IT LIKE 'IFIX' DOES.
13200
13300 ; SUBROUTINE GETPTS
13400 ; DIMENSION N(500),NP(500)
13500 ; COMMON/XRN/RN(4000) /KJY/ K,J
13600 ; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS,VY,JQ(17)
13700 ; 1/PTR/PWDS(250),ITEM,LL,I,IX
13800 ; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
13900 ; 1,(R6,RJQ(4)),(N,RN(2500)),(NP,RN(3000))
14000
14100 GETPTS: 0 ;CALL GETPTS(N)
14200 SETZ J, ; J=0
14300 SETZ K, ; K=0
14400 MOVE JJ2,POSI+=8
14500 MOVE R2,.COMM.
14600 ;; SETZ X,
14700 MOVE X,@(16)
14800 SOS X
14900 MOVEI M,PTR ; DO 1 M=1,ITEM
15000 ADDI M,(X)
15100 G1: AOJ X,
15200 MOVE L,(M)
15300 FIXX(L)
15400 MOVEI R,XRN ;L=PWDS(M)
15500 ADDI R,(L) ;IF(RTLINE(L))GO TO 1
15600 MOVE 1,1(R) ;RN(L+2)
15700 CAML R2,[=5.0]
15800 JRST GZ
15900 CAME R2,1
16000 JRST GX
16100 GZ: MOVE A,.COMM.+7 ;RY=RN(L+1)
16200 JUMPLE A,G9 ;F(R6.LE.0)GO TO 9
16300 CAME A,(R)
16400 JRST GX
16500 ; CHECK CODE NUM
16600 G9: MOVE A,2(R) ;IF(R6.NE.RY)GO TO 1
16700 CAMLE A,.COMM.+6
16800 JRST G2 ;9 IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
16900 CAMGE A,.COMM.+5 ;R4
17000 JRST G2
17100
17200 SKIPG JJ2
17300 MOVE JJ2,X
17400 AOJ J,
17500 ; IN LIMITS?
17600 MOVEI A,XRN+=2498 ;J=J+1
17700 ADDI A,(J)
17800 MOVEI 0,(L)
17900 AOJ K, ;K=K+1
18000 MOVEI 1,XRN+=2998
18100 ADDI 1,(K) ;NP(K)=L
18200 MOVEM 0,(1)
18300 ADDI 0,3 ;N(J)=L+3
18400 MOVEM 0,(A)
18500 ; NP IS FOR USE IN JUSTIFY ROUTINE
18600 G2: MOVE RY,(R) ;2 IF(RY.LT.4)GO TO 1
18700 CAMGE RY,[=4.0]
18800 JRST GX
18900 CAMLE RY,[=7.0]
19000 JRST GX ;IF(RY.GT.7)GO TO 1
19100 ; TWO-ENDED ITEM?
19200 MOVE RZ,-1(R) ;RZ=RN(L)
19300 ; WD CNT
19400 CAMN RY,[=4.0] ;GO TO(4,5,6,7),IFIX(RY)-3
19500 JRST G4
19600 CAMN RY,[=5.0]
19700 JRST G5
19800 CAMN RY,[=6.0]
19900 JRST G6
20000 CAMG RZ,[=4.0] ;4 IF(RZ.GT.2)GO TO 5
20100 JRST G5 ; THERE IS A TRILL WIGGLE
20200 JRST GX ;GO TO 1 -- NO WIGGLE (P7≠0)
20300 G4: CAMG RZ,[=2.0] ;7 IF(RZ.GT.3)GO TO 5
20400 JRST GX
20500 JRST G5 ;GO TO 1
20600 G6: CAMGE RZ,[=8.0] ;6 IF(RZ.LT.8)GO TO 8
20700 JRST G8
20800 ;; MOVEI 1,XRN ;IF(RN(L+10).LT.30)GO TO 8
20900 ;; ADDI 1,(L)
21000 ;; MOVE 1,11(1)
21100 MOVE 1,=9(R)
21200 CAMGE 1,[=30.0]
21300 JRST G8
21400 MOVE A,7(R) ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
21500 CAMLE A,.COMM.+6
21600 JRST G8
21700 CAMGE A,.COMM.+5
21800 JRST G8
21900 SKIPG JJ2
22000 MOVE JJ2,X
22100 AOJ J,
22200 ; IN LIMITS?
22300 MOVEI A,XRN+=2498 ;J=J+1
22400 ADDI A,(J)
22500 MOVEI 0,(L) ;J=J+1
22600 ADDI 0,=8 ;N(J)=L+8
22700 MOVEM 0,(A)
22800 G8: CAMGE RZ,[=7.0] ;8 IF(RZ.LT.7)GO TO 5
22900 JRST G5
23000 MOVE A,6(R) ;IF(RN(L+7))GO TO G8B
23100 JUMPL A,G8B ; P7 IS NEG FOR TREMOLO
23200 MOVE A,7(R) ;IF(RN(L+8).NE.0)GO TO G8B
23300 JUMPN A,G8B
23400 CAMGE RZ,[=8.0]
23500 JRST G5 ;IF(RZ.LT.8)GO TO G5
23600 MOVE A,=9(R) ;IF(RN(L+10).EQ.0)GO TO G5
23700 JUMPE A,G5 ;PASSES NUMBER OVER BEAM.
23800 G8B: MOVE A,8(R)
23900 CAMLE A,.COMM.+6
24000 JRST G5
24100 CAMGE A,.COMM.+5 ;R4
24200 JRST G5
24300
24400 SKIPG JJ2
24500 MOVE JJ2,X
24600 AOJ J, ;J=J+1
24700 ; IN LIMITS?
24800 MOVEI A,XRN+=2498 ;J=J+1
24900 ADDI A,(J)
25000 MOVEI 0,(L)
25100 ADDI 0,=9 ;IF(OUTLIM(R4,R5,RN(L+9)))GO TO 5
25200 MOVEM 0,(A) ;N(J)=L+9
25300 G5: MOVE A,5(R)
25400 CAMLE A,.COMM.+6
25500 JRST GX
25600 CAMGE A,.COMM.+5 ;R4
25700 JRST GX
25800
25900 SKIPG JJ2
26000 MOVE JJ2,X
26100 AOJ J,
26200 ; IN LIMITS?
26300 MOVEI A,XRN+=2498 ;J=J+1
26400 ADDI A,(J)
26500 MOVEI 0,(L) ;5 IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
26600 ADDI 0,6 ;N(J)=L+6
26700 MOVEM 0,(A)
26800 GX: CAMGE X,PTR+=250 ;1 CONTINUE
26900 AOJA M,G1
27000 MOVEM JJ2,POSI+=8
27100 MOVEM J,KJY+1
27200 MOVEM K,KJY
27300 JRA 16,1(16)
27400
27500 ; SUBROUTINE MOVIT
27600 ; DIMENSION N(500)
27700 ; COMMON/XRN/RN(4000) /KJY/ DONT,J
27800 ; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS,VY,JQ(17)
27900 ; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R9,RJQ(7))
28000 ; 1,(R6,RJQ(4)),(N,RN(2500)),(R8,RJQ(6))
28100 MOVIT: 0 ;RDIS=(R9-R8)/(R5-R4)
28200 MOVE R,.COMM.+=10
28300 FSBR R,.COMM.+=9
28400 MOVE RY,.COMM.+6
28500 FSBR RY,.COMM.+5
28600 FDVR R,RY
28700 MOVEI L,XRN+=2499 ; DO 1 K=1,J
28800 SETZ K,
28900 MOVE 0,.COMM.+=10 ; SET UP R9
29000 M1: MOVE X,L ; L=N(K)
29100 MOVE A,(X)
29200 MOVEI R2,XRN ;RA=RN(L)
29300 ADDI R2,(A)
29400 MOVEI RZ,(R2)
29500 MOVE R2,-1(R2)
29600 CAMGE R2,.COMM.+5 ;IF(OUTLIM(R4,R5,RA))GO TO 1
29700 JRST MX
29800 CAMLE R2,.COMM.+6
29900 JRST MX
30000 JUMPE 0,M2 ;IF(R9.NE.0)RA=(RA-R4)*RDIS
30100 FSBR R2,.COMM.+5
30200 FMPR R2,R
30300 M2: FADR R2,.COMM.+=9 ; RN(L)=R8+RA
30400 MOVEM R2,-1(RZ)
30500 MX: AOJ K, ;1 CONTINUE
30600 CAMGE K,KJY+1
30700 AOJA L,M1
30800 JRA 16,(16)
30900
31000 OUTLIM: 0 ; FUNCTION OUTLIM(I,J)
31100 SETO 0, ; OUTLIM=-1
31200 MOVE 4,.COMM.+5 ; IF(RN(I+J).LT.R4)RETURN
31300 MOVEI 2,XRN
31400 ADD 2,@(16)
31500 ADD 2,@1(16)
31600 CAMLE 4,-1(2)
31700 JRA 16,2(16)
31800 MOVE 5,.COMM.+6 ; IF(RN(I+J).GT.R5)RETURN
31900 CAMGE 5,-1(2)
32000 JRA 16,2(16)
32100 SETZ 0, ; OUTLIM=0
32200 JRA 16,2(16)
32300
32400
32500 SORT2: 0 ;SUBROUTINE SORT2(RPOS,M)
32600 MOVEI 2,2 ;DIMENSION RPOS(2,200)
32700 S3: MOVE 6,2 ;(K=L HERE)
32800 SETO 11, ;L=2
32900 HRRZI 3,@(16) ;3 J=-1
33000 MOVE 4,2 ;RX=RPOS(1,L-1)
33100 SUBI 4,1 ;L-1
33200 IMULI 4,2
33300 ADDI 4,(3)
33400 MOVE 5,-2(4) ;RX
33500 S2: MOVE 7,6 ; DO 2 K=L,M
33600 ;; LSH 7,1 ;IF(RPOS(1,K).GE.RX)GO TO 2
33700 IMULI 7,2 ;IF(RPOS(1,K).GE.RX)GO TO 2
33800 ADDI 7,(3)
33900 CAMG 5,-2(7)
34000 JRST S1 ; CONTINUE
34100 MOVE 5,-2(7) ; RX=RPOS(1,K)
34200 ;;C WHY WERE ALL THE RX'S JX ????? 9/6/73
34300 MOVE 11,6 ;J=K
34400 S1: CAMGE 6,@1(16) ;2 CONTINUE
34500 AOJA 6,S2
34600 JUMPL 11,S4 ;IF(J)GO TO 4
34700 MOVE 12,2 ;K=L-1
34800 SOS 12
34900 IMULI 12,2 ;(K*2)
35000 ADD 12,3 ;CALL EXCH(RPOS(1,K),RPOS(1,J))
35100 MOVE 10,-2(12)
35200 ;; LSH 11,1 ;MULTS BY 2 (LEFT SHIFT)
35300 IMULI 11,2
35400 ADD 11,3
35500 EXCH 10,-2(11)
35600 MOVEM 10,-2(12)
35700 MOVE 10,-1(12) ;CALL EXCH(RPOS(2,K),RPOS(2,J))
35800 EXCH 10,-1(11)
35900 MOVEM 10,-1(12)
36000 S4: CAMGE 2,@1(16) ;4 L=L+1
36100 AOJA 2,S3 ;IF(L.LE.M)GO TO 3
36200 JRA 16,2(16) ;END
36300
36400 EXTEN: 0 ;FUNCTION EXTEN(X)
36500 HRRM 16,.+2
36600 JSA 16,AMOD ;EXTEN=AMOD(X,1.)*10.
36700 JUMP @0
36800 JUMP [=1.0]
36900 FMPR [=10.0]
37000 JRA 16,1(16)
37100
37200 END